$(function () {
    // 需求1.初始化文章分类列表
    // 因为添加,修改,删除后都要重新渲染页面所以封装函数
    // 调用函数
    let layer = layui.layer
    let form = layui.form
    // 页面展示出来
    initArtCateList()
    // 封装
    function initArtCateList() {
        axios({
            method: 'GET',
            url: '/my/article/cates'
        }).then(res => {
            // console.log(res);
            if (res.data.status !== 0) {
                return layer.msg(res.data.message)
            }
            // 成功之后渲染
            let arr = []
            // 遍历放回的数组
            res.data.data.forEach(ele => {   // 第一个参数是其本身第二个为索引号
                arr.push(`
                    <tr>
                        <td>${ele.Id}</td>
                        <td>${ele.name}</td>
                        <td>${ele.alias}</td>
                        <td>
                            <button data-id="${ele.Id}" class="btn-edit layui-btn layui-btn-xs">编辑</button>
                            <button data-id="${ele.Id}" class="btn-del layui-btn layui-btn-danger layui-btn-xs">删除</button>
                        </td>
                    </tr>
                `)
            })
            $("tbody").empty().html(arr.join(""))
        })
    }

    // 需求2.点击按钮,弹出添加类别对话框
    let indexAdd = 0  // 定义一个全局变量,接收layer.open()的索引值,将来用于关闭对话框
    $("#addBtn").on('click', function () {
        indexAdd = layer.open({
            type: 1,
            title: '添加文章类别',
            area: ['500px', '260px'],
            // content,里面放form表单
            content: `
                <form id="addForm" class="layui-form" action="">
                    <!-- 1.分类名称 -->
                    <div class="layui-form-item">
                        <label class="layui-form-label">分类名称</label>
                        <div class="layui-input-block">
                            <input type="text" name="name" required lay-verify="required" placeholder="请输入分类名称" autocomplete="off"
                                class="layui-input">
                        </div>
                    </div>
                    <!-- 2.分类别名 -->
                    <div class="layui-form-item">
                        <label class="layui-form-label">分类别名</label>
                        <div class="layui-input-block">
                            <input type="text" name="alias" required lay-verify="required" placeholder="请输入分类别名" autocomplete="off"
                                class="layui-input">
                        </div>
                    </div>
                    <!-- 3.按钮 -->
                    <div class="layui-form-item">
                        <div class="layui-input-block">
                            <button class="layui-btn" lay-submit lay-filter="formDemo">确认添加</button>
                            <button type="reset" class="layui-btn layui-btn-primary">重置</button>
                        </div>
                    </div>
                </form>
            `
        });
    })

    // 需求3.点击确认添加按钮,添加文章分类
    // 后添加的动态元素,需要使用事件委托
    $("body").on('submit', "#addForm", function (e) {
        e.preventDefault()
        // 发送axios 添加分类 
        axios({
            method: 'POST',
            url: '/my/article/addcates',
            data: $(this).serialize()
        }).then(res => {
            console.log(res);
            if (res.data.status !== 0) {
                return layer.msg(res.data.message)
            }
            // 成功:提示,初始化文章分类
            layer.msg('恭喜您,添加文章类别成功!')
            // 页面展示出来
            initArtCateList()
            // 对话框清空
            $("#addForm")[0].reset()
            // 关闭对话框
            layer.close(indexAdd)

        })
    })

    // 需求4.编辑分类弹出层
    let indexEdit = 0
    $("tbody").on('click', ".btn-edit", function () {
        // 点击编辑按钮做两件事.1.弹出层
        indexEdit = layer.open({
            type: 1,
            title: '修改文章类别',
            area: ['500px', '260px'],
            // content,里面放form表单
            content: `
                <form id="editForm" class="layui-form" action="" lay-filter="editForm">

                    <!-- 隐藏域,填充Id值,将来修改数据的时候使用 -->
                    <input type="hidden" name="Id">

                    <!-- 1.分类名称 -->
                    <div class="layui-form-item">
                        <label class="layui-form-label">分类名称</label>
                        <div class="layui-input-block">
                            <input type="text" name="name" required lay-verify="required" placeholder="请输入分类名称" autocomplete="off"
                                class="layui-input">
                        </div>
                    </div>
                    <!-- 2.分类别名 -->
                    <div class="layui-form-item">
                        <label class="layui-form-label">分类别名</label>
                        <div class="layui-input-block">
                            <input type="text" name="alias" required lay-verify="required" placeholder="请输入分类别名" autocomplete="off"
                                class="layui-input">
                        </div>
                    </div>
                    <!-- 3.按钮 -->
                    <div class="layui-form-item">
                        <div class="layui-input-block">
                            <button class="layui-btn" lay-submit lay-filter="formDemo">确认修改</button>
                            <button type="reset" class="layui-btn layui-btn-primary">重置</button>
                        </div>
                    </div>
                </form>
            `
        });
        // 2.赋值
        // 根据 Id 更新文章分类数据
        // 获取数据,和渲染数据,要写到.btn-edit的点击事件里面
        let id = $(this).attr('data-id')
        // 发送 ajax
        axios({
            method: 'GET',
            // /:id 动态参数(路由参数)
            // 特点: / 不能省略, : 一定要去掉
            url: '/my/article/cates/' + id
        }).then(res => {
            // console.log(res);
            if (res.data.status !== 0) {
                return layer.msg(res.data.message)
            }
            // 成功后渲染
            form.val("editForm", res.data.data)
        })

    })

    // 需求5.修改文章分类
    $("body").on('submit', "#editForm", function (e) {
        e.preventDefault()
        // 发送axios 修改分类 
        axios({
            method: 'POST',
            url: '/my/article/updatecate',
            data: $(this).serialize()
        }).then(res => {
            // console.log(res);
            if (res.data.status !== 0) {
                return layer.msg(res.data.message)
            }
            // 成功:提示,初始化文章分类
            layer.msg('恭喜您,修改文章类别成功!')
            initArtCateList()
            // 清空弹出框
            $("#editForm")[0].reset()
            // 关闭对话框
            layer.close(indexEdit)

        })
    })

    // 需求6.删除
    // 根据 Id 删除文章分类
    $("tbody").on('click', '.btn-del', function () {
        // 获取自定义属性值
        let id = $(this).attr("data-id")
        // 弹窗
        layer.confirm('确认删除吗?', { icon: 3, title: '提示' }, function (index) {
            axios({
                url: '/my/article/cates/' + id
            }).then(res => {
                // console.log(res);
                if (res.data.status !== 0) {
                    return layer.msg(res.data.message)
                }
                // 成功后
                layer.msg('恭喜您,删除文章类别成功!')
            })
            layer.close(index);
        });
    })

})